From c8bdffa10a9b767592d19fa1d333f2fe5697a507 Mon Sep 17 00:00:00 2001 From: "emellor@ewan" Date: Wed, 28 Sep 2005 15:03:00 +0100 Subject: [PATCH] Merged. --- linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c | 12 +++++++++++- linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c b/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c index 088b7e0e36..7ebbe25348 100644 --- a/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c +++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c @@ -209,7 +209,10 @@ static void dump_fault_path(unsigned long address) { unsigned long *p, page; - page = __pa(per_cpu(cur_pgd, smp_processor_id())); + preempt_disable(); + page = __pa(per_cpu(cur_pgd, smp_processor_id())); + preempt_enable(); + p = (unsigned long *)__va(page); p += (address >> 30) * 2; printk(KERN_ALERT "%08lx -> *pde = %08lx:%08lx\n", page, p[1], p[0]); @@ -237,8 +240,13 @@ static void dump_fault_path(unsigned long address) { unsigned long page; + preempt_disable(); page = ((unsigned long *) per_cpu(cur_pgd, smp_processor_id())) [address >> 22]; + preempt_enable(); + + page = ((unsigned long *) per_cpu(cur_pgd, get_cpu())) + [address >> 22]; printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page, machine_to_phys(page)); /* @@ -567,7 +575,9 @@ vmalloc_fault: pmd_t *pmd, *pmd_k; pte_t *pte_k; + preempt_disable(); pgd = index + per_cpu(cur_pgd, smp_processor_id()); + preempt_enable(); pgd_k = init_mm.pgd + index; if (!pgd_present(*pgd_k)) diff --git a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c index 3a4db31d4d..d7ef1409cd 100644 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c @@ -149,7 +149,9 @@ void dump_pagetable(unsigned long address) pmd_t *pmd; pte_t *pte; + preempt_disable(); pgd = (pgd_t *)per_cpu(cur_pgd, smp_processor_id()); + preempt_enable(); pgd += pgd_index(address); printk("PGD %lx ", pgd_val(*pgd)); @@ -252,7 +254,9 @@ static int vmalloc_fault(unsigned long address) /* On Xen the line below does not always work. Needs investigating! */ /*pgd = pgd_offset(current->mm ?: &init_mm, address);*/ + preempt_disable(); pgd = (pgd_t *)per_cpu(cur_pgd, smp_processor_id()); + preempt_enable(); pgd += pgd_index(address); pgd_ref = pgd_offset_k(address); -- 2.30.2